class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 
     * @param grid int整型vector<vector<>> 
     * @return int整型
     */
    /*
    从陆地出发，也就是grid[i][j]=1，从它的四个方向分别进行dfs
    每次递归都要对边界和grid[i][j]值判断，如果超出边界，或者该单元格！=1，return 0；
    要保证每个陆地只访问一遍，所以每个陆地访问后，标记为非1
    */
    int dfs(vector<vector<int>>& grid,int i,int j)
    {
        if(i<0||i>=grid.size()||j<0||j>=grid[0].size()||grid[i][j]==0)
            return 0;
        grid[i][j]=0;//标记
        return 1+dfs(grid,i-1,j)+
            dfs(grid,i+1,j)+
            dfs(grid,i,j-1)
            +dfs(grid,i,j+1);
    }
    int maxAreaIsland(vector<vector<int> >& grid) {
        // write code here
        int m=grid.size();
        int n=grid[0].size();
        int maxval=0;
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                  if(grid[i][j]==1)
                       maxval= max(dfs(grid,i,j),maxval);
            }
        }
        return maxval;
    }
};